# basic_list_parser.py
import os
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain.output_parsers import CommaSeparatedListOutputParser


def list_parser_demo():
    """列表解析器演示"""

    print("📝 列表解析器演示")
    print("=" * 30)

    llm = ChatOpenAI(
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
        model="qwen-turbo"
    )

    # 创建列表解析器
    list_parser = CommaSeparatedListOutputParser()

    # 查看格式说明
    print("🔍 解析器格式说明：")
    print(list_parser.get_format_instructions())

    # 创建提示词模板
    prompt_template = ChatPromptTemplate.from_template("""
    根据职位要求，提取候选人需要掌握的核心技能：

    职位描述：{job_description}

    {format_instructions}
    """)

    # 测试数据
    job_descriptions = [
        "高级Java开发工程师，需要熟练掌握Spring Boot、微服务架构、MySQL数据库、Redis缓存",
        "前端开发工程师，要求精通JavaScript、React、Vue.js、Webpack、Node.js",
        "数据分析师，需要掌握Python、SQL、Excel、Tableau、机器学习基础"
    ]

    for job_desc in job_descriptions:
        print(f"\n📋 分析职位：{job_desc[:20]}...")

        # 格式化提示词
        formatted_prompt = prompt_template.format(
            job_description=job_desc,
            format_instructions=list_parser.get_format_instructions()
        )

        # 获取AI响应
        response = llm.invoke(formatted_prompt)
        print(f"AI原始输出：{response.content}")

        # 解析输出
        try:
            parsed_skills = list_parser.parse(response.content)
            print(f"✅ 解析后的技能列表：{parsed_skills}")
            print(f"   类型：{type(parsed_skills)}")
            print(f"   技能数量：{len(parsed_skills)}")

            # 进一步处理
            print("   技能详情：")
            for i, skill in enumerate(parsed_skills, 1):
                print(f"   {i}. {skill.strip()}")

        except Exception as e:
            print(f"❌ 解析失败：{e}")

        print("-" * 50)


# 运行演示
list_parser_demo()
